﻿using System;
using GestorDeFlotasDesktop.Listados;
using System.Windows.Forms;
using Controllers;
namespace GestorDeFlotasDesktop
{
    public partial class AbmAuto : Form
    {

        #region Inicializador

        public AbmAuto()
        {
            InitializeComponent();
        }

        #endregion

        #region Propiedades

        public lstAutos parentForm { get; set; }
        public Auto auto { get; set; }
        public MarcaAuto marca { get; set; }
        public ModeloAuto modelo { get; set; }
        public Reloj reloj { get; set; }
        public Operacion operacion { get; set; }
        private bool valido = true;

        #endregion

        #region Eventos

        private void AbmAuto_Load(object sender, EventArgs e)
        {
            CargarMarcas();
            CargarRelojes();
            if (operacion == Operacion.Alta)
            {
                chkHabilitado.Checked = true;
                lblOperacion.Text = "Nuevo";
            }
            else
            {
                CargarForm();
                if (operacion == Operacion.Baja)
                {
                    InhabilitarForm();
                    lblOperacion.Text = "Eliminar";
                    btnLimpiar.Enabled = false;
                }
                else
                {
                    lblOperacion.Text = "Modificar";
                }

            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {

            if (operacion == Operacion.Baja)
            {
                AutoController.Eliminar(auto.Auto_Id);
                MessageBox.Show("El auto fue eliminado con éxito");
                if (parentForm != null) parentForm.ActualizarGrilla();
                Close();
            }
            else
            {

                ValidarForm(sender, e);
                if (valido)
                {
                    if (operacion == Operacion.Alta)
                    {
                        auto = CargarObjeto();
                        AutoController.Agregar(auto);
                        MessageBox.Show("El auto fue dado de alta con éxito");
                    }
                    else if (operacion == Operacion.Modificacion)
                    {
                        auto = CargarObjeto();
                        AutoController.Modificar(auto);
                        MessageBox.Show("El auto fue modificado con éxito");
                    }

                    LimpiarForm();
                    auto = null;
                    if (parentForm != null) parentForm.ActualizarGrilla();
                    Close();
                }
                valido = true;
            }



        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarForm();
        }

        #endregion

        #region Metodos del Form

        private Auto CargarObjeto()
        {
            if (auto == null) auto = new Auto();
            if (marca == null) marca = new MarcaAuto();
            if (modelo == null) modelo = new ModeloAuto();
            if (reloj == null) reloj = new Reloj();
            marca.MaAu_Id = ((MarcaAuto)cboMarca.SelectedItem).MaAu_Id;
            modelo.MoAu_Marca = marca;
            modelo.MoAu_Id = ((ModeloAuto)cboModelo.SelectedItem).MoAu_Id;
            auto.Auto_Modelo = modelo;
            auto.Auto_Patente = txtPatente.Text;
            auto.Auto_Licencia = txtLicencia.Text;
            auto.Auto_Rodado = txtRodado.Text;
            reloj.Reloj_Id = ((Reloj)cboReloj.SelectedItem).Reloj_Id;
            auto.Auto_Reloj = reloj;
            auto.Auto_Habilitado = chkHabilitado.Checked;

            return auto;
        }

        private void CargarMarcas()
        {
            cboMarca.DataSource = AutoController.ObtenerMarcas(0);
            cboMarca.DisplayMember = "MaAu_Nombre";
            cboMarca.ValueMember = "MaAu_Id";
        }

        private void CargarModelos(int marcaId)
        {
            cboModelo.DataSource = AutoController.ObtenerModelos(marcaId);
            cboModelo.DisplayMember = "MoAu_Nombre";
            cboModelo.ValueMember = "MoAu_Id";
        }

        private void CargarRelojes()
        {
            int reloj = auto != null ? auto.Auto_Reloj.Reloj_Id : 0;
           
            cboReloj.DataSource = RelojController.ObtenerTodosHabilitados(true, reloj);
            cboReloj.DisplayMember = "Reloj_NumeroSerie";
            cboReloj.ValueMember = "Reloj_Id";
        }


        private void CargarForm()
        {
            cboMarca.SelectedValue = auto.Auto_Modelo.MoAu_Marca.MaAu_Id;
            cboModelo.SelectedValue = auto.Auto_Modelo.MoAu_Id;
            txtPatente.Text = auto.Auto_Patente;
            txtLicencia.Text = auto.Auto_Licencia;
            txtRodado.Text = auto.Auto_Rodado;
            cboReloj.SelectedValue = auto.Auto_Reloj.Reloj_Id;
            chkHabilitado.Checked = auto.Auto_Habilitado;
        }

        private void LimpiarForm()
        {
            cboMarca.SelectedValue = 0;
            cboModelo.SelectedValue = 0;
            txtPatente.Text = "";
            txtLicencia.Text = "";
            txtRodado.Text = "";
            cboReloj.SelectedValue = 0;
            chkHabilitado.Checked = true;
        }

        private void InhabilitarForm()
        {
            cboMarca.Enabled = false;
            cboModelo.Enabled = false;
            txtPatente.Enabled = false;
            txtLicencia.Enabled = false;
            txtRodado.Enabled = false;
            cboReloj.Enabled = false;
            chkHabilitado.Enabled = false;
        }

        #endregion

        #region Validaciones


        private void ValidarForm(object sender, EventArgs e)
        {
            valido = true;
            cboMarca_Validated(sender, e);
            cboModelo_Validated(sender, e);
            txtPatente_Validated(sender, e);
            txtLicencia_Validated(sender, e);
            txtRodado_Validated(sender, e);
            cboReloj_Validated(sender, e);
        }

        private void cboMarca_Validated(object sender, EventArgs e)
        {
            if (cboMarca.SelectedValue.Equals(0))
            {
                errProvider.SetError(cboMarca, "Debe seleccionar una marca");
                valido = false;
            }
            else
            {
                errProvider.SetError(cboMarca, "");
            }
        }

        private void cboModelo_Validated(object sender, EventArgs e)
        {
            if (cboModelo.SelectedValue.Equals(0))
            {
                errProvider.SetError(cboModelo, "Debe seleccionar un modelo");
                valido = false;
            }
            else
            {
                errProvider.SetError(cboModelo, "");
            }
        }

        private void txtPatente_Validated(object sender, EventArgs e)
        {
            if (txtPatente.Text.Length != 6)
            {
                errProvider.SetError(txtPatente, "Debe ingresar 6 digitos");
                valido = false;
            }
            else if (AutoController.ExisteLaPatente(txtPatente.Text, auto))
            {
                errProvider.SetError(txtPatente, "Hay otro auto con esta patente");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtPatente, "");
            }
        }

        private void txtLicencia_Validated(object sender, EventArgs e)
        {
            if (AutoController.ExisteLaLicencia(txtLicencia.Text, auto))
            {
                errProvider.SetError(txtLicencia, "Hay otro auto con esta licencia");
                valido = false;
            }
            else if (txtLicencia.Text.Equals(""))
            {
                errProvider.SetError(txtLicencia, "Debe ingresar una licencia");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtLicencia, "");
            }
        }

        private void txtRodado_Validated(object sender, EventArgs e)
        {
            if (txtRodado.Text.Equals(""))
            {
                errProvider.SetError(txtRodado, "Debe ingresar un rodado");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtRodado, "");
            }
        }

        private void cboReloj_Validated(object sender, EventArgs e)
        {
            if (cboReloj.SelectedValue.Equals(0))
            {
                errProvider.SetError(cboReloj, "Debe seleccionar un reloj");
                valido = false;
            }
            else if (AutoController.ExisteElReloj(((Reloj)cboReloj.SelectedItem).Reloj_Id, auto))
            {
                errProvider.SetError(cboReloj, "Hay otro auto con este reloj");
                valido = false;
            }
            else
            {
                errProvider.SetError(cboReloj, "");
            }
        }
      

        #endregion

        private void cboMarca_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarModelos(((MarcaAuto)cboMarca.SelectedItem).MaAu_Id);
        }

        

      



    }
}
